/*
 * @Description: 
 * @version: 
 * @Author: cy
 * @Date: 2022-05-05 10:28:28
 * @LastEditors: cy
 * @LastEditTime: 2022-05-05 11:28:01
 */
/***
 * Set操作
 * 使用Set对象：new add delete has size
 * 迭代Set:多种迭代方法、Set与Array互转、求交集/差集
 */
let mySet = new Set();
mySet.add(1);
// 添加2个5，只会存一个，但是添加2个相同的object，看起来一样，其实他们存储的位置不一样
mySet.add(5);
mySet.add(5);
mySet.add('some text');
let o = { a: 1, b: 2 };
mySet.add(o);
mySet.add({ a: 1, b: 2 })

// has方法
const has = mySet.has(5); // true
mySet.has('some text'); // true
mySet.has(o) // true

// delete
mySet.delete(5);

// 迭代,对于Set，keys和values是一样的
for (let item of mySet) {
    console.log(item)
}
for (let item of mySet.keys()) {
    console.log(item)
}
for (let item of mySet.values()) {
    console.log(item)
}
// 验证一下，keys和values是一样的
for (let [keys, values] of mySet.entries()) {
    console.log(keys, values)
}

// 把Set转为Array
const myArr = [...mySet];
const myArray = Array.from(mySet);

// 把Array转为Set
const mySet2 = new Set([1,2,3,4]);

// 求交集
let intersection = new Set([...mySet].filter(x => mySet2.has(x)));

//求差集，就是其中一个集合没有而另一个集合有的值
const difference = new Set([...mySet].filter(x => !mySet2.has(x)));



